<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html [
  <!ENTITY % htmlDTD
    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "DTD/xhtml1-strict.dtd">
  %htmlDTD;
  <!ENTITY % netErrorDTD
    SYSTEM "chrome://global/locale/netError.dtd">
  %netErrorDTD;
  <!ENTITY % globalDTD
    SYSTEM "chrome://global/locale/global.dtd">
  %globalDTD;
]>
<html xmlns="http://www.w3.org/1999/xhtml" class="km_PageBackground">
  <head>
    <title>&loadError.label;</title>
    <link rel="stylesheet" href="chrome://global/skin/netError.css" type="text/css" media="all" />
    <link rel="icon" type="image/png" href="" />
    <script type="application/x-javascript"><![CDATA[
      // Error url MUST be formatted like this:
      //   moz-neterror:page?e=error&u=url&d=desc
      // Note that this file uses document.documentURI to get
      // the URL (with the format from above). This is because
      // document.location.href gets the current URI off the docshell,
      // which is the URL displayed in the location bar, i.e.
      // the URI that the user attempted to load.
      function getErrorCode()
      {
        var url = document.documentURI;
        var error = url.search(/e\=/);
        var duffUrl = url.search(/\&u\=/);
        return decodeURIComponent(url.slice(error + 2, duffUrl));
      }
      function getDescription()
      {
        var url = document.documentURI;
        var desc = url.search(/d\=/);
        // desc == -1 if not found; if so, return an empty string
        // instead of what would turn out to be portions of the URI
        if (desc == -1) return "";
        return decodeURIComponent(url.slice(desc + 2));
      }
      function retryThis()
      {
        // Session history has the URL of the page that failed
        // to load, not the one of the error page. So, just call
        // reload(), which will also repost POST data correctly.
        try {
          location.reload();
        } catch (e) {
          // We probably tried to reload a URI that caused an exception to
          // occur;  e.g. a non-existent file.
        }
      }
      function initPage()
      {
        var err = getErrorCode();
        // if it's an unknown error or there's no title or description
        // defined, get the generic message
        var errTitle = document.getElementById("et_" + err);
        var errDesc  = document.getElementById("ed_" + err);
        if (!errTitle || !errDesc)
        {
          errTitle = document.getElementById("et_generic");
          errDesc  = document.getElementById("ed_generic");
        }
        var title = document.getElementById("errorTitleText");
        if (title)
        {
          title.parentNode.replaceChild(errTitle, title);
          // change id to the replaced child's id so styling works
          errTitle.id = "errorTitleText";
        }
        var sd = document.getElementById("errorShortDescText");
        if (sd)
          sd.textContent = getDescription();
        var ld = document.getElementById("errorLongDesc");
        if (ld)
        {
          ld.parentNode.replaceChild(errDesc, ld);
          // change id to the replaced child's id so styling works
          errDesc.id = "errorLongDesc";
        }
        // remove undisplayed errors to avoid bug 39098
        var errContainer = document.getElementById("errorContainer");
        errContainer.parentNode.removeChild(errContainer);
      }
    ]]></script>
  </head>
  <body dir="&locale.dir;" class="km_PageBackground km_Text">
    <div id="errorContainer" style="display:none">
      <div id="errorTitlesContainer">
        <h1 id="et_generic">&generic.title;</h1>
        <h1 id="et_dnsNotFound">&dnsNotFound.title;</h1>
        <h1 id="et_fileNotFound">&fileNotFound.title;</h1>
        <h1 id="et_malformedURI">&malformedURI.title;</h1>
        <h1 id="et_protocolNotFound">&protocolNotFound.title;</h1>
        <h1 id="et_connectionFailure">&connectionFailure.title;</h1>
        <h1 id="et_netTimeout">&netTimeout.title;</h1>
        <h1 id="et_redirectLoop">&redirectLoop.title;</h1>
        <h1 id="et_unknownSocketType">&unknownSocketType.title;</h1>
        <h1 id="et_netReset">&netReset.title;</h1>
        <h1 id="et_netOffline">&netOffline.title;</h1>
        <h1 id="et_netInterrupt">&netInterrupt.title;</h1>
        <h1 id="et_deniedPortAccess">&deniedPortAccess.title;</h1>
        <h1 id="et_proxyResolveFailure">&proxyResolveFailure.title;</h1>
        <h1 id="et_proxyConnectFailure">&proxyConnectFailure.title;</h1>
      </div>
      <div id="errorDescriptionsContainer">
        <div id="ed_generic">&generic.longDesc;</div>
        <div id="ed_dnsNotFound">&dnsNotFound.longDesc;</div>
        <div id="ed_fileNotFound">&fileNotFound.longDesc;</div>
        <div id="ed_malformedURI">&malformedURI.longDesc;</div>
        <div id="ed_protocolNotFound">&protocolNotFound.longDesc;</div>
        <div id="ed_connectionFailure">&connectionFailure.longDesc;</div>
        <div id="ed_netTimeout">&netTimeout.longDesc;</div>
        <div id="ed_redirectLoop">&redirectLoop.longDesc;</div>
        <div id="ed_unknownSocketType">&unknownSocketType.longDesc;</div>
        <div id="ed_netReset">&netReset.longDesc;</div>
        <div id="ed_netOffline">&netOffline.longDesc;</div>
        <div id="ed_netInterrupt">&netInterrupt.longDesc;</div>
        <div id="ed_deniedPortAccess">&deniedPortAccess.longDesc;</div>
        <div id="ed_proxyResolveFailure">&proxyResolveFailure.longDesc;</div>
        <div id="ed_proxyConnectFailure">&proxyConnectFailure.longDesc;</div>
      </div>
    </div>
    <div id="errorPageContainer" class="km_TextBackground km_TextBorder km_PageContainer">
      <div id="errorTextContainer" class="km_Icon">
        <div class="km_Border km_SpecialBorder km_IconWidth km_IconHeight">
          <h1 id="errorTitleText"/>
          <p id="errorShortDescText" class="km_Border"/>
          <div id="errorLongDesc"/>
        </div>
      </div>
      <div class="km_IconWidth km_Button">
        <xul:button xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
                    id="errorTryAgain" label="&retry.label;" oncommand="retryThis();"/>
      </div>
    </div>
    <script type="application/x-javascript">initPage();</script>
  </body>
</html>